/*********************************************************************************/
/*                                                                               */
/*      PORT Driver                                                              */
/*                                                                               */
/*      Last updated by:   CBS                                                   */
/*      Last update date:  2013/1/25                                             */
/*      Revision:          0                                                     */
/*      Copyright:         DENS0                                                 */
/*                                                                               */
/*********************************************************************************/

#ifndef PORT_H
#define PORT_H

/*********************************************************************************/
/*  include files                                                                */
/*********************************************************************************/
#include "Std_Types.h"
#include "Port_Cfg.h"

/*********************************************************************************/
/*  defines / data types / structs / unions / macros                             */
/*********************************************************************************/
#define PORT_VENDOR_ID                  (U2)1
#define PORT_MODULE_ID                  (U2)1
#define PORT_INSTANCE_ID	            (U2)0

#define PORT_SW_MAJOR_VERSION           (U1)1
#define PORT_SW_MINOR_VERSION           (U1)0
#define PORT_SW_PATCH_VERSION           (U1)1

#define PORT_AR_MAJOR_VERSION           (U1)2
#define PORT_AR_MINOR_VERSION           (U1)2
#define PORT_AR_PATCH_VERSION           (U1)1

/* Error Codes */
#define PORT_E_PARAM_PIN                0x0a
#define PORT_E_DIRECTION_UNCHANGEABLE   0x0b
#define PORT_E_PARAM_CONFIG             0x0c
#define PORT_E_PARAM_INVALID_MODE       0x0d
#define PORT_E_MODE_UNCHANGEABLE        0x0e
#define PORT_E_UNINIT                   0x0f

/* Service id's */
#define PORT_INIT_ID                    0x00
#define PORT_SET_PIN_DIRECTION_ID       0x01
#define PORT_REFRESH_PORT_DIRECTION_ID  0x02
#define PORT_SET_PIN_MODE_ID            0x03
#define PORT_GET_VERSION_INFO_ID        0x04

/* The type Port_PinDirectionType is a type for defining the direction of a Port Pin.*/
typedef enum
{
    PORT_PIN_IN = 0,
    PORT_PIN_OUT
} Port_PinDirectionType;


typedef U2 Port_PinModeType;
typedef U2 Port_PinType;

/*********************************************************************************/
/*  API Functions                                                                */
/*********************************************************************************/

/************************************************************************************************************************/
/*  Service name        :   Port_Init                                                                                   */
/*  Sync/Async          :   Synchronous                                                                                 */
/*  Reentrancy          :   Non Reentrant                                                                               */
/*  Parameters (in)     :   Pointer to configuration set.                                                               */
/*  Return value        :   None                                                                                        */
/*  Discription         :   Initializes the Port Driver module.                                                         */
/************************************************************************************************************************/
void Port_Init(const Port_ConfigType* ConfigPtr);

/************************************************************************************************************************/
/*  Service name        :   Port_SetPinDirection                                                                        */
/*  Sync/Async          :   Synchronous                                                                                 */
/*  Reentrancy          :   Reentrant                                                                                   */
/*  Parameters (in)     :   Pin        Port Pin ID number.                                                              */
/*                          Mode       New Port Pin mode to be set on port pin.                                         */
/*  Return value        :   None                                                                                        */
/*  Discription         :   Sets the port pin direction.                                                                */
/************************************************************************************************************************/
void Port_SetPinDirection(Port_PinType Pin,Port_PinDirectionType Direction);

/************************************************************************************************************************/
/*  Service name        :   Port_RefreshPortDirection                                                                   */
/*  Sync/Async          :   Synchronous                                                                                 */
/*  Reentrancy          :   Non Reentrant                                                                               */
/*  Parameters (in)     :   None                                                                                        */
/*  Return value        :   None                                                                                        */
/*  Discription         :   Refreshes port direction.                                                                   */
/************************************************************************************************************************/
void Port_RefreshPortDirection(void);

/************************************************************************************************************************/
/*  Service name        :   Port_SetPinMode                                                                             */
/*  Sync/Async          :   Synchronous                                                                                 */
/*  Reentrancy          :   Reentrant                                                                                   */
/*  Parameters (in)     :   Pin        Port Pin ID number.                                                              */
/*                          Mode       New Port Pin mode to be set on port pin.                                         */
/*  Return value        :   None                                                                                        */
/*  Discription         :   Sets the port pin mode.                                                                     */
/************************************************************************************************************************/
void Port_SetPinMode(Port_PinType Pin,Port_PinModeType Mode);

/************************************************************************************************************************/
/*	Service name        :	Port_GetVersionInfo                                                                         */
/*	Sync/Async          :	Synchronous                                                                                 */
/*	Reentrancy          :	Non Reentrant                                                                               */
/*	Parameters (out)    :	versioninfo 	    Pointer to where to store the version information of this module.	    */
/*	Return value        :   None                                                                                        */
/*	Description	        : 	Returns the version information of this module.                                             */
/************************************************************************************************************************/
#if (PORT_VERSION_INFO_API == STD_ON)
void Port_GetVersionInfoPtr(Std_VersionInfoType* versioninfo);
#endif

#endif/* PORT_H */

/**** End Of File ****************************************************************/
